#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <map>
#include <queue>
#include <list>

#define sf(x) scanf("%d", &x)
#define pf(x) printf("%d", x)
#define pf2(x,y) printf("%d %d ", x,y)
#define sf2(x,y) scanf("%d %d", &x,&y)
#define sff(x) scanf("%lf", &x)
#define pff(x) printf("%lf ", x)
#define ENDL printf("\n")
#define pfl(x) printf("%I64d ", x)
#define sfl(x) scanf("%I64d", &x)

using namespace std;

typedef long long ll;

string s;
bool u[300];

ll dfs(int l, int r,char bord,bool flag)
{
	if(l==r)return 1;
	long long  sum=0;
	if(s[l]==s[r])
	{
		sum+=dfs(l+1,r-1,s[l],flag);
		sum%=1000000000;
	}
	if(flag)
	{
		for(int i=1;i<r-l;i++)
		{
			if(s[l+i-1]==s[l]&&s[l+i]==bord&&s[l+i+1]==s[r])
			{
				sum+=dfs(l+1,l+i,s[l],false)*dfs(l+i,r-1,s[r],true);
				sum%=1000000000;
			}
		}
	}
	return sum%1000000000;
}

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	long long ans;
	cin>>s;
	if(s[0]!=s[s.size()-1] || s.size()%2 == 0)
	{
		printf("0\n");
		return 0;
	}
	else ans=dfs(0,s.length()-1,s[0],true);
	printf("%I64d",ans);
	return 0;
}
